cimport numpy
cimport cython

cdef extern from "math.h":
    double sqrt(double)
    double ceil(double)

cdef class IntVec:
    """
    Class to represent Vector in 3D.
    """
    cdef public object x
    cdef public object y
    cdef public object z
    
    cpdef IntVec mul(self, m)
    cpdef richcmp(IntVec self,IntVec p,int oper)
    cpdef IntVec iadd(IntVec self, IntVec p)
    cpdef IntVec isub(IntVec self, IntVec p)
    cpdef IntVec imul(self, m)
    cpdef IntVec idiv(self, m)
    #cpdef double getitem(IntVec self,i)
    #cpdef setitem(IntVec self,int i,val)
    cpdef add_inplace(self, IntVec p)
    cpdef IntVec add(self, IntVec p)
    cpdef set(self, x, y, z)
    cpdef numpy.ndarray asarray(self)
    cpdef double norm(self)
    cpdef double length(self)
    cpdef double dot(self, IntVec p)
    cpdef IntVec cross(self, IntVec p)
    cpdef double distance(self, IntVec p)

cpdef inline IntVec IntVec_new(x=*, y=*, z=*)
cdef inline IntVec IntVec_sub(IntVec pa, IntVec pb)
cdef inline IntVec IntVec_add(IntVec pa, IntVec pb)
cdef inline double IntVec_length(IntVec p)
cdef inline double IntVec_length2(IntVec p)
cdef inline double IntVec_distance(IntVec pa, IntVec pb)
cdef inline double IntVec_distance2(IntVec pa, IntVec pb)
